﻿#define _CRT_SECURE_NO_WARNINGS 1

//友元
//友元提供了⼀种突破类访问限定符封装的⽅式
//友元分为：友元函数和友元类，在函数声明或者类声明的前⾯加friend，并且把友元声明放到⼀个类的⾥⾯


//友元函数可以在类定义的任何地⽅声明，不受类访问限定符限制
//友元类中的成员函数都可以是另⼀个类的友元函数，都可以访问另⼀个类中的私有和保护成员。
//友元类的关系是单向的，不具有交换性，⽐如A类是B类的友元，但是B类不是A类的友元。
//友元类关系不能传递，如果A是B的友元， B是C的友元，但是A不是C的友元

#include <iostream>
using namespace std;

class A
{
	// 友元声明
	friend class B;
private:
	int _a1 = 1;
	int _a2 = 2;
};

class B
{
public:
	void func1(const A& aa)
	{
		cout << aa._a1 << endl;  //B是A的友元类 因此B可以访问A中的私有private中的成员变量
		cout << _b1 << endl;
	}

	void func2(const A& aa)
	{
		cout << aa._a2 << endl;
		cout << _b2 << endl;
	}
private:
	int _b1 = 3;
	int _b2 = 4;
};

int main()
{
	A aa;
	B bb;

	bb.func1(aa);
	bb.func1(aa);
	return 0;
}